home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / asm_msc1.arc / EX59.ASM < prev    next >
Assembly Source File  |  1988-11-20  |  2KB  |  58 lines

  1. TITLE  Sine of an Angle (EX59.ASM)
  2.           PAGE      ,132
  3. DATA      SEGMENT   PARA 'DATA'
  4. SINES  DW  0,175,349,523,698,872     ;0-5
  5.        DW  1045,1219,1392,1564,1736  ;6-10
  6.        DW  1908,2079,2250,2419,2588  ;11-15
  7.        DW  2756,2924,3090,3256,3420  ;16-20
  8.        DW  3584,3746,3907,4067,4226  ;21-25
  9.        DW  4384,4540,4695,4848,5000  ;26-30
  10.        DW  5150,5299,5446,5592,5736  ;31-35
  11.        DW  5878,6018,6157,6293,6428  ;36-40
  12.        DW  6561,6691,6820,6947,7071  ;41-45
  13.        DW  7193,7313,7431,7547,7660  ;46-50
  14.        DW  7771,7880,7986,8090,8191  ;51-55
  15.        DW  8290,8387,8480,8572,8660  ;56-60
  16.        DW  8746,8829,8910,8988,9063  ;61-65
  17.        DW  9135,9205,9272,9336,9397  ;66-70
  18.        DW  9455,9511,9563,9613,9659  ;71-75
  19.        DW  9703,9744,9781,9816,9848  ;76-80
  20.        DW  9877,9903,9926,9945,9962  ;81-85
  21.        DW  9976,9986,9994,9998,10000 ;86-90
  22. DATA      ENDS
  23. OUR_CODE  SEGMENT   PARA 'CODE'
  24.       PUBLIC    FIND_SINE
  25. FIND_SINE PROC      FAR
  26.           ASSUME    CS:OUR_CODE,DS:DATA
  27.       PUSH        DS                 ;Save the caller's registers
  28.       PUSH      AX
  29.       PUSH      CX
  30. ;
  31. ;  Initialize the data segment address.
  32. ;
  33.       MOV        BX,DATA
  34.       MOV       DS,BX
  35. ;
  36. ;  This is the look-up procedure.
  37. ;
  38.       SUB        CX,CX         ;Initialize sign to 0
  39.       CMP        AX,181         ;Angle < 181 degrees?
  40.       JB        SIN_POS         ; Yes.  Continue with sign = 0
  41.       MOV        CX,8000H         ; No.  Set sign = 1
  42.       SUB        AX,180         ;  and subtract 180 from angle
  43. SIN_POS:  CMP        AX,91         ;Angle < 91 degrees?
  44.       JB        GET_SIN         ; Yes.  Go look up sine
  45.       NEG        AX                 ; No.  Subtract angle from 180
  46.       ADD        AX,180
  47. GET_SIN:  MOV        BX,AX         ;Make angle a word index
  48.       SHL       BX,1
  49.       MOV        BX,SINES[BX]     ; and look up the sine value
  50.       OR        BX,CX         ;Combine sine with sign bit
  51.       POP        CX
  52.       POP        AX
  53.       POP        DS
  54.       RET                 ; and exit
  55. FIND_SINE ENDP
  56. OUR_CODE  ENDS
  57.           END   FIND_SINE
  58.